#include <iostream>
#include <unordered_set>

using namespace std;
// 202. 快乐数
// 编写一个算法来判断一个数 n 是不是快乐数。
// https://leetcode.cn/problems/happy-number/description/

// 使用HashTable
class Solution {
public:
    bool isHappy(int n) {
        unordered_set<int> record;
        record.insert(n);
        while(n != 1) {
            n = op(n);
            if(record.find(n) == record.end())
                record.insert(n);
            else
                return false;
        }

        return true;
    }

private:
    int op(int x) {
        int res = 0;
        while(x) {
            int t = x % 10;
            res += t * t;
            x /= 10;
        }
        return res;
    }
};

void print_bool(bool res){
    cout << (res ? "True" : "False") << endl;
}
int main() {
    print_bool(Solution().isHappy(19)); // True
    return 0;
}
